package com.ball.dev.controller;


import com.ball.common.dtos.PageQuery;
import com.ball.common.dtos.ResponseResult;
import com.ball.common.utils.BeanUtils;
import com.ball.common.utils.UserContext;
import com.ball.dev.entity.dto.PushDto;
import com.ball.dev.entity.po.Personal;
import com.ball.dev.entity.po.Post;
import com.ball.dev.entity.vo.PostVo;
import com.ball.dev.service.IPersonalService;
import com.ball.dev.service.IPostService;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.List;

/**
 * 帖子 前端控制器
 *
 * @author lou
 * @since 2024-03-04
 */
@RestController
@RequestMapping("/post")
@RequiredArgsConstructor
public class PostController {

    private final IPostService postService;
    private final IPersonalService personalService;
   @PostMapping("/addPost")
    public ResponseResult addPost(@RequestBody Post postDto){
        //添加一个帖子
        return  postService.addPost(postDto);
    }

    @GetMapping("/list")
    public ResponseResult postList(PageQuery query){
        //获取帖子列表
        return postService.postList(query);
    }

    @GetMapping("/{id}")
    public ResponseResult getPost(@PathVariable String id){
        //根据id获取帖子
        return postService.getPostById(id);
    }

    @PostMapping("/addPush")
    public ResponseResult addPushPost(@RequestBody PushDto pushDto){
        //添加一个推送
        return postService.addPushPost(pushDto);
    }


    @GetMapping("/getPushList")
    public ResponseResult getPushList(PageQuery query) {
        //获取推送列表
        return postService.getPushList(query);
    }

    @PutMapping("/updatePost")
    public ResponseResult updatePost(@RequestBody Post postDto){
        //更新帖子
        return postService.updatePost(postDto);
    }
    @DeleteMapping("/deletePost")
    public ResponseResult deletePost(@RequestParam("id") String id,@RequestParam("status") Integer status){
        //根据id删除帖子
        return postService.deletePost(id,status);
    }

    //一个帖子的点赞数
    @GetMapping("/getPostLikes/{postId}")
    public ResponseResult getPostLikes(@PathVariable("postId") String postId) {
        //根据id获取点赞数
        Post post = postService.getById(postId);

        return ResponseResult.okResult(post.getLikes());
    }

    //一个帖子的收藏数
    @GetMapping("/getPostCollects/{postId}")
    public ResponseResult getPostCollects(@PathVariable("postId") String postId) {
        //根据id获取收藏数
        Post post = postService.getById(postId);

        return ResponseResult.okResult(post.getCollects());
    }


    @GetMapping("/careList")
    public ResponseResult careList() {
        //获取关注列表
        return postService.careList();
    }

   /**
    * 获取我的帖子列表
    *
    * 该接口不需要参数，通过用户上下文获取当前用户ID，然后查询该用户发布的所有状态为正常的帖子，
    * 并将这些帖子的信息包装成PostVo对象返回给前端。
    *
    * @return 返回操作结果，其中包含帖子列表。如果用户没有发布任何帖子，则列表为空。
    */
   @GetMapping("/getMyPost")
   public ResponseResult getMyPost() {
       // 获取当前用户ID
       String userId = UserContext.getUser();
       // 查询该用户发布的所有状态为正常的帖子，并按创建时间降序排序
       List<Post> posts = postService.lambdaQuery().eq(Post::getUserId, userId).eq(Post::getStatus, 0)
               .orderByDesc(Post::getCreateTime).list();
       ArrayList<PostVo> postVos = new ArrayList<>();

       // 查询当前用户的个人资料信息
       Personal personal = personalService.lambdaQuery().eq(Personal::getUserId, userId).one();

       // 如果用户有发布帖子，遍历帖子列表，将每个帖子信息转换为PostVo对象，并设置用户头像和用户名
       if (posts.size() > 0){
           for (Post post : posts) {
               PostVo postVo = BeanUtils.copyBean(post, PostVo.class);
               postVo.setPhoto(personal.getPhoto());
               postVo.setUserName(personal.getUserName());
               postVos.add(postVo);
           }
       }
       // 返回操作结果，包含包装后的帖子列表
       return ResponseResult.okResult(postVos);
   }


    @GetMapping("/getMyLikePost")
    public ResponseResult getMyLikePost() {
        //获取我的点赞帖子
        return postService.getMyLikePost();
    }

    @GetMapping("/getMyCollectPost")
    public ResponseResult getMyCollectPost() {
        //获取我的收藏帖子
        return postService.getMyCollectPost();
    }


    @GetMapping("/Manage/List")
    public ResponseResult manageList() {
        //根据创建时间降序排列，获取所有的文章
        List<Post> posts = postService.lambdaQuery().orderByDesc(Post::getCreateTime).list();
        //返回文章列表
        List<PostVo> postVos = new ArrayList<>();
        if (posts.size() > 0){
               postVos = BeanUtils.copyList(posts, PostVo.class);
            for (PostVo postVo : postVos) {
                Personal personal = personalService.lambdaQuery().eq(Personal::getUserId, postVo.getUserId()).one();
                postVo.setPhoto(personal.getPhoto());
                postVo.setUserName(personal.getUserName());
            }
        }
        return ResponseResult.okResult(postVos);
    }



}
